package fr.afcepf.atodcp2.benbai.dao.implementations;

import java.util.ArrayList;
import java.util.List;

import fr.afcepf.atodcp2.benbai.dao.generique.GenericDaoHibernateTemplateImpl;
import fr.afcepf.atodcp2.benbai.dao.interfaces.IDaoProduit;
import fr.afcepf.atodcp2.benbai.entity.LigneCommande;
import fr.afcepf.atodcp2.benbai.entity.Marque;
import fr.afcepf.atodcp2.benbai.entity.Produit;
import fr.afcepf.atodcp2.benbai.entity.Type;

public class DaoProduit extends GenericDaoHibernateTemplateImpl<Produit, Integer>
		implements IDaoProduit {

	
	@SuppressWarnings("unchecked")
	@Override
	public List<Produit> getProduitsByType(Type type) {
		List<Produit> retour = new ArrayList<Produit>();
		String param = "paramIdType";
		Object value = type.getIdType();
		retour = hibernateTemplate.findByNamedParam("FROM Produit p WHERE p.type.idType like :paramIdType", param, value);		
		return retour;
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<Produit> getProduitsByMarque(Marque marque) {
		List<Produit> retour = new ArrayList<Produit>();
		String param = "paramIdMarque";
		Object value = marque.getIdMarque();
		retour = hibernateTemplate.findByNamedParam("FROM Produit p WHERE p.marque.idMarque like :paramIdMarque", param, value);		
		return retour;
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<Produit> getProduitsByNom(String nom) {
		List<Produit> retour = new ArrayList<Produit>();
		String param = "paramNom";
		Object value = "%"+nom.toLowerCase()+"%";
		retour = hibernateTemplate.findByNamedParam("FROM Produit p WHERE p.nomProduit like :paramNom", param, value);
		return retour;
	}

	@SuppressWarnings("unchecked")
	@Override
	public Produit getProduitByLigneCommande(LigneCommande ligneCommande) {
		Produit produit = new Produit();
		List<Produit> listeProduit = new ArrayList<Produit>();
		String param = "paramIdProduit";
		Object value = ligneCommande.getProduit().getIdProduit();
		listeProduit = hibernateTemplate.findByNamedParam("FROM Produit p WHERE p.idProduit like :paramIdProduit", param, value);		
		produit = listeProduit.get(0);
		return produit;
	}
	
}
